SCU模组调试小程序moduleDemo

SCU模组调试工具程序

​ 目前SCU模组通信协议采用统一标准的规范,支持读取、设置和上报服务,数据对象按照DT分类,数据部分采用A-XDR编码。该工具实现模组协议实现了规范服务和数据解码功能。

moduleDemo支持功能说明

  1. 【help】帮助信息命令
  2. 【unpack】数据解码功能命令
  3. 【comm】通信服务功能命令,读取、设置和上报功能
  4. 通信通道目前支持遥信脉冲和回路巡检通道,其它后续扩展
sysadm@SCU:~$ sudo ./moduleDemo  help
 Usage:                                                            
      appname command [option]  [param]                            
Command: help                                                      
 Options                                                           
 -h:    show this help info                                        

Command: unpack                                                    
 Options                                                           
 -e:   example DT xdr info unpack.support DT(0000,4000,9000,90003) 
 -d:   module xdr apdu data. fomat hex string.                     

Command: comm                                                      
 Options                                                           
 -p:    operation(0:get 1:set 2:notify)                            
 -i:    driver device index                                        
 -d:    module xdr apdu data. fomat hex string                     
 -t:    timeout seconds                                            
 -c:    repeat loop count                                          
support driver device list: 
  index=00 name:/dev/ttyYMHL0        desc:YMHL mgnt_channel
  index=01 name:/dev/ttyYMHL1        desc:YMHL rsp_channel
  index=02 name:/dev/ttyYMHL2        desc:YMHL cthl_channel

moduleDemo数据解码功能

unpack 解码功能,将16进制报文数据解析为可视化的json字符。

​ -e: 选项查看特定DT对象的example报文解码效果,目前支持的DT对象(0000,4000,9000,90003)

​ -d:选项用于解码任意模组协议A-XDR的数据报文。报文数据部分参数输入采用16进制字符串。HEX字符带空格输入则需要用双引号括起来,保证是作为一个命令行输入参数。

示例1,查看DT0000对象演示数据的解码效果

sudo ./moduleDemo  unpack -e -d 0000
DECODE_TEST_APDU:02 07 0A 0D 43 4D 59 52 49 2D 58 4C 44 5A 30 30 34 0A 00 06 00 00 00 66 1A 07 E5 07 10 05 06 00 00 00 64 1A 07 E5 07 10 05 0A 00 
M-XDR data: 
{
"structure":{
"visible-string":"CMYRI-XLDZ004",
"visible-string":"",
"double-long-unsigned":"102",
"date":"2021-07-16",
"double-long-unsigned":"100",
"date":"2021-07-16",
"visible-string":""
}
}

示例2,查看DT4000对象演示数据的解码效果

 sudo ./moduleDemo  unpack -e 4000
DECODE_TEST_APDU:02 03 04 04 F0 04 04 10 01 04 19 07 B2 01 01 04 00 00 00 00 00 19 07 B2 01 01 04 00 00 00 00 00 19 07 B2 01 01 04 00 00 00 00 00 19 07 E5 0C 07 02 13 28 34 03 AC 
M-XDR data: 
{
"structure":{
"bit-string":"4-0B1111",
"bit-string":"4-0B0001",
"array-date_time":["1970-01-01 00:00:00.000ms", "1970-01-01 00:00:00.000ms", "1970-01-01 00:00:00.000ms", "2021-12-07 19:40:52.940ms"]
}
}

示例3,解码数据报文,不带空格输入。

sysadm@SCU:~$ sudo ./moduleDemo  unpack -d 040450
M-XDR data: 
{
"bit-string":"4-0B0101"
}

示例4,解码数据报文,带空格输入,需要双引号括起来。

注:可直接复制日志报文中的数据部分进行解码

sudo ./moduleDemo  unpack -d "02 20 01 03 09 01 02 09 01 02 09 01 02 01 00 01 03 06 00 00 02 22 06 00 00 02 2C 06 00 00 02 22 01 03 06 00 00 3B 55 06 00 00 3A 19 06 00 00 3A BD 01 03 06 00 00 3B 52 06 00 00 3A 15 06 00 00 3A B9 01 03 06 00 00 00 00 06 00 00 00 0C 06 00 00 00 00 01 03 06 00 00 00 32 06 00 00 00 32 06 00 00 00 32 01 03 06 00 00 00 00 06 00 00 00 06 06 00 00 00 06 01 03 06 00 00 01 5E 06 00 00 01 5E 06 00 00 01 5E 01 03 06 00 00 00 64 06 00 00 00 64 06 00 00 00 64 01 03 06 00 00 00 06 06 00 00 00 06 06 00 00 00 06 01 03 06 00 00 01 5E 06 00 00 01 5E 06 00 00 01 5E 01 03 06 00 00 00 96 06 00 00 00 96 06 00 00 00 96 01 03 06 00 00 00 07 06 00 00 00 07 06 00 00 00 08 01 03 06 00 00 01 5E 06 00 00 01 5E 06 00 00 01 5E 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00"
M-XDR data: 
{
"structure":{
"array-octet-string":["1-HEX02", "1-HEX02", "1-HEX02"],
"array":[],
"array-double-long-unsigned":["546", "556", "546"],
"array-double-long-unsigned":["15189", "14873", "15037"],
"array-double-long-unsigned":["15186", "14869", "15033"],
"array-double-long-unsigned":["0", "12", "0"],
"array-double-long-unsigned":["50", "50", "50"],
"array-double-long-unsigned":["0", "6", "6"],
"array-double-long-unsigned":["350", "350", "350"],
"array-double-long-unsigned":["100", "100", "100"],
"array-double-long-unsigned":["6", "6", "6"],
"array-double-long-unsigned":["350", "350", "350"],
"array-double-long-unsigned":["150", "150", "150"],
"array-double-long-unsigned":["7", "7", "8"],
"array-double-long-unsigned":["350", "350", "350"],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[],
"array":[]
}
}

moduleDemo通信服务功能

示例1, 读取服务,读取特定对象DT,主要通信通道的对应关系

sudo ./moduleDemo comm -p 0 -i 1 -d 0000
operation: get
device: /dev/ttyYMHL1  YMHL rsp_channel
timeout: 10
loop_count: 1
apdu: 0000

device name = /dev/ttyYMHL1
running loop = 1/1

get_request DT=0000 resp=0xbec495c8 resp->timeout=10000
recv_process task start
COM_TX: 68 03 00 42 00 02 00 00 0c 46 16 
COM_RX: 68 2f 00 c2 00 82 00 00 01 02 07 0a 0d 43 4d 59 52 49 2d 58 4c 44 5a 30 30 34 0a 00 06 00 00 00 66 1a 07 e5 07 10 05 06 00 00 00 64 1a 07 e5 07 10 05 0a 00 c9 7f 16
M-XDR data: 
{
"structure":{
"visible-string":"CMYRI-XLDZ004",
"visible-string":"",
"double-long-unsigned":"102",
"date":"2021-07-16",
"double-long-unsigned":"100",
"date":"2021-07-16",
"visible-string":""
}
}

示例2, 设置服务,设置特定对象DT,主要通信通道的对应关系

sysadm@SCU:~$ sudo ./moduleDemo  comm -p 1 -i 1 -d 4101120065
operation: set
device: /dev/ttyYMHL1  YMHL rsp_channel
timeout: 10
loop_count: 1
apdu: 4101120065

device name = /dev/ttyYMHL1
running loop = 1/1

set_request DT=4101 resp=0xbed425b8 resp->timeout=10000
COM_TX: 68 06 00 42 00 03 41 01 12 00 65 12 3b 16 
COM_RX: 68 04 00 c2 00 83 41 01 00 59 d7 16

示例3,上报服务,可指定超时时间等待上报消息,默认超时时间10秒

sudo ./moduleDemo  comm -p 2 -i 1      
operation: notify
device: /dev/ttyYMHL1  YMHL rsp_channel
timeout: 10
loop_count: 1
apdu: 

device name = /dev/ttyYMHL1
running loop = 1/1
wait report notify remain time seconds: 10
recv_process task start
wait report notify remain time seconds: 9
wait report notify remain time seconds: 8
wait report notify remain time seconds: 7
wait report notify remain time seconds: 6
wait report notify remain time seconds: 5
wait report notify remain time seconds: 4
COM_RX: 68 3a 00 82 00 04 40 00 01 02 03 04 04 e0 04 04 10 01 04 19 07 b2 01 01 04 00 00 00 00 00 19 07 b2 01 01 04 00 00 00 00 00 19 07 b2 01 01 04 00 00 00 00 00 19 07 e5 0c 09 04 12 3a 15 03 66 c6 d4 16
uitls notify_proccess 
report service infomation DT=4000
M-XDR data: 
{
"structure":{
"bit-string":"4-0B1110",
"bit-string":"4-0B0001",
"array-date_time":["1970-01-01 00:00:00.000ms", "1970-01-01 00:00:00.000ms", "1970-01-01 00:00:00.000ms", "2021-12-09 18:58:21.870ms"]
}
}
report_confirm: DT=4000
COM_TX: 68 03 00 00 00 84 40 00 f5 0d 16 
wait report notify remain time seconds: 3
COM_RX: 68 3a 00 82 00 04 40 00 01 02 03 04 04 f0 04 04 10 01 04 19 07 b2 01 01 04 00 00 00 00 00 19 07 b2 01 01 04 00 00 00 00 00 19 07 b2 01 01 04 00 00 00 00 00 19 07 e5 0c 09 04 12 3a 17 00 78 20 bf 16
uitls notify_proccess 
report service infomation DT=4000
M-XDR data: 
{
"structure":{
"bit-string":"4-0B1111",
"bit-string":"4-0B0001",
"array-date_time":["1970-01-01 00:00:00.000ms", "1970-01-01 00:00:00.000ms", "1970-01-01 00:00:00.000ms", "2021-12-09 18:58:23.120ms"]
}
}
report_confirm: DT=4000
COM_TX: 68 03 00 00 00 84 40 00 f5 0d 16 
wait report notify remain time seconds: 2
wait report notify remain time seconds: 1
recv_process task end
最后更新于 12th Dec 2021